A variety of software applications, including software applications for monitoring and obtaining downhole formation characteristics for subterranean formations, need to modify and update code to implement, improve, or remove features and functions of those applications. To implement these types of changes in code for software applications related to subterranean formations, code must be developed separately and external to the implemented software. To upgrade these systems, this code must also be properly tested to prevent the possibility of introducing errors or unnecessary complexities which may cause issues if implemented in a system.
As an example, upgrading a monitoring tool for obtaining downhole formation characteristics for a subterranean formation may require substantial man hours and other resources. If upgraded software results in an error in that software application, this may result in delay in the development of the drilling operation which could cause substantial monetary or other loss.
In order to ensure the quality of the upgraded portion of the code, software developers perform extensive unit testing on the software update in a self-contained environment. Only after extensive unit testing is the code ready for use in a realtime environment. In a realtime environment, the software application may constantly be connected to a database management system containing a database with substantial amounts of data that needs to be manipulated as a part of that software application. However, in a unit test, such data in the database is not readily available because a self-contained unit test requires that a database remain constant in order to properly evaluate whether the code in the unit test is functioning properly. However, such databases are not readily available because the code in the unit test may act upon the data rendering the data different in the database, the composition of the database may constantly be changing, and tools may not be available to render the data in the database into appropriate useful information for the software to act upon.
Typical software applications handle data in the form of data objects and cannot manipulate data in databases directly. Relational database management systems, in contrast, cannot operate on data objects directly. However, object relational mapping tools do exist to translate data stored in a database into data objects to be manipulated by software applications.
Previously, the quantity of data used and the complexity of the data structures involved in such a unit test make inputting the data into a system to perform the unit test an unrealistic exercise. The functionalities and the relationship associated with the data structures may be too intricate or challenging and unrealistic for a developer to input into a system for testing. Using a database to maintain the data also causes problems because the unit test no longer is in a self-contained environment and the database can be volatile and change with the test, whereas a unit test requires that the database remain constant before each test run.
It is desirable thus to have a tool that can be used to manipulate data into objects that contains the relationship structure for the data without the need to store or extract that data from a database, removing the dependency on the external database. It is further desirable to perform a unit-test that can test a complex data environment without the unrealistic expectation for a developer to create relationships for each data structure from scratch for every unit test, which may be substantial and constant for software applications.
While embodiments of this disclosure have been depicted and described and are defined by reference to exemplary embodiments of the disclosure, such references do not imply a limitation on the disclosure, and no such limitation is to be inferred. The subject matter disclosed is capable of considerable modification, alteration, and equivalents in form and function, as will occur to those skilled in the pertinent art and having the benefit of this disclosure. The depicted and described embodiments of this disclosure are examples only, and not exhaustive of the scope of the disclosure.